@strapi/admin 4.1.0 → 4.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin/src/{pages/AuthPage/components/Logo → components/UnauthenticatedLogo}/index.js +1 -1
- package/admin/src/content-manager/components/DynamicTable/CellContent/CellValue.js +2 -1
- package/admin/src/content-manager/pages/ListSettingsView/components/DraggableCard.js +1 -1
- package/admin/src/content-manager/pages/ListSettingsView/components/SortDisplayedFields.js +22 -4
- package/admin/src/content-manager/pages/ListSettingsView/reducer.js +1 -1
- package/admin/src/pages/App/index.js +2 -0
- package/admin/src/pages/AuthPage/components/ForgotPassword/index.js +1 -1
- package/admin/src/pages/AuthPage/components/ForgotPasswordSuccess/index.js +1 -1
- package/admin/src/pages/AuthPage/components/Login/BaseLogin.js +1 -1
- package/admin/src/pages/AuthPage/components/Oops/index.js +1 -1
- package/admin/src/pages/AuthPage/components/Register/index.js +7 -11
- package/admin/src/pages/AuthPage/components/ResetPassword/index.js +1 -1
- package/admin/src/pages/AuthPage/index.js +13 -16
- package/admin/src/pages/MarketplacePage/index.js +11 -2
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ContentBox/index.js +1 -1
- package/admin/src/pages/UseCasePage/index.js +173 -0
- package/admin/src/translations/en.json +10 -0
- package/admin/src/translations/fr.json +1 -1
- package/admin/src/translations/ko.json +15 -8
- package/build/1094.1087a368.chunk.js +1 -0
- package/build/1454.c0f0c2df.chunk.js +2 -0
- package/build/{5032.ed02a466.chunk.js.LICENSE.txt → 1454.c0f0c2df.chunk.js.LICENSE.txt} +0 -0
- package/build/2736.53cd9bba.chunk.js +2 -0
- package/build/{2736.e2b1233b.chunk.js.LICENSE.txt → 2736.53cd9bba.chunk.js.LICENSE.txt} +0 -0
- package/build/4362.70618acb.chunk.js +1 -0
- package/build/9853.b75be3f0.chunk.js +1 -0
- package/build/{Admin-authenticatedApp.3bb032bf.chunk.js → Admin-authenticatedApp.ce381f88.chunk.js} +1 -1
- package/build/api-tokens-create-page.0981141a.chunk.js +1 -0
- package/build/api-tokens-edit-page.3faf1af1.chunk.js +1 -0
- package/build/{api-tokens-list-page.1ccc8615.chunk.js → api-tokens-list-page.26a05a21.chunk.js} +1 -1
- package/build/content-manager.141d110d.chunk.js +1 -0
- package/build/content-type-builder-translation-ko-json.d2080111.chunk.js +1 -0
- package/build/en-json.5aa9e5ec.chunk.js +1 -0
- package/build/fr-json.a9ce0700.chunk.js +1 -0
- package/build/{i18n-translation-ko-json.6591fe59.chunk.js → i18n-translation-ko-json.aecb7e01.chunk.js} +1 -1
- package/build/index.html +1 -1
- package/build/ko-json.dd36fdc0.chunk.js +1 -0
- package/build/{main.a5659553.js → main.670c6b23.js} +2 -2
- package/build/{main.a5659553.js.LICENSE.txt → main.670c6b23.js.LICENSE.txt} +0 -0
- package/build/{runtime~main.cfbc273d.js → runtime~main.2e70453d.js} +1 -1
- package/build/upload-translation-ko-json.d7345fe1.chunk.js +1 -0
- package/build/webhook-edit-page.b2e22743.chunk.js +1 -0
- package/ee/admin/pages/AuthPage/components/Providers/index.js +1 -1
- package/index.js +6 -1
- package/package.json +6 -6
- package/build/2736.e2b1233b.chunk.js +0 -2
- package/build/4261.a4e1e93c.chunk.js +0 -1
- package/build/4362.d0c1a04a.chunk.js +0 -1
- package/build/5032.ed02a466.chunk.js +0 -2
- package/build/9238.bdd93dae.chunk.js +0 -1
- package/build/api-tokens-create-page.2ffd893a.chunk.js +0 -1
- package/build/api-tokens-edit-page.a939bd0a.chunk.js +0 -1
- package/build/content-manager.5f6197c8.chunk.js +0 -1
- package/build/content-type-builder-translation-ko-json.bc6fb3dc.chunk.js +0 -1
- package/build/en-json.bb614bb0.chunk.js +0 -1
- package/build/fr-json.d1de8155.chunk.js +0 -1
- package/build/ko-json.63d1660a.chunk.js +0 -1
- package/build/upload-translation-ko-json.90424b11.chunk.js +0 -1
- package/build/webhook-edit-page.adad0a42.chunk.js +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import PropTypes from 'prop-types';
|
|
2
2
|
import { useIntl } from 'react-intl';
|
|
3
3
|
import toString from 'lodash/toString';
|
|
4
|
+
import parseISO from 'date-fns/parseISO';
|
|
4
5
|
import { getNumberOfDecimals } from './utils/getNumberOfDecimals';
|
|
5
6
|
|
|
6
7
|
const CellValue = ({ type, value }) => {
|
|
@@ -8,7 +9,7 @@ const CellValue = ({ type, value }) => {
|
|
|
8
9
|
let formattedValue = value;
|
|
9
10
|
|
|
10
11
|
if (type === 'date') {
|
|
11
|
-
formattedValue = formatDate(value, { dateStyle: 'full' });
|
|
12
|
+
formattedValue = formatDate(parseISO(value), { dateStyle: 'full' });
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
if (type === 'datetime') {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
1
|
+
import React, { useState, useRef, useEffect } from 'react';
|
|
2
2
|
import styled from 'styled-components';
|
|
3
3
|
import { PropTypes } from 'prop-types';
|
|
4
4
|
import { useIntl } from 'react-intl';
|
|
@@ -36,6 +36,24 @@ const SortDisplayedFields = ({
|
|
|
36
36
|
}) => {
|
|
37
37
|
const { formatMessage } = useIntl();
|
|
38
38
|
const [isDraggingSibling, setIsDraggingSibling] = useState(false);
|
|
39
|
+
const [lastAction, setLastAction] = useState(null);
|
|
40
|
+
const scrollableContainerRef = useRef();
|
|
41
|
+
|
|
42
|
+
function handleAddField(...args) {
|
|
43
|
+
setLastAction('add');
|
|
44
|
+
onAddField(...args);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function handleRemoveField(...args) {
|
|
48
|
+
setLastAction('remove');
|
|
49
|
+
onRemoveField(...args);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (lastAction === 'add' && scrollableContainerRef?.current) {
|
|
54
|
+
scrollableContainerRef.current.scrollLeft = scrollableContainerRef.current.scrollWidth;
|
|
55
|
+
}
|
|
56
|
+
}, [displayedFields, lastAction]);
|
|
39
57
|
|
|
40
58
|
return (
|
|
41
59
|
<>
|
|
@@ -56,7 +74,7 @@ const SortDisplayedFields = ({
|
|
|
56
74
|
borderWidth="1px"
|
|
57
75
|
hasRadius
|
|
58
76
|
>
|
|
59
|
-
<ScrollableContainer size="1" paddingBottom={4}>
|
|
77
|
+
<ScrollableContainer size="1" paddingBottom={4} ref={scrollableContainerRef}>
|
|
60
78
|
<Stack horizontal size={3}>
|
|
61
79
|
{displayedFields.map((field, index) => (
|
|
62
80
|
<DraggableCard
|
|
@@ -65,7 +83,7 @@ const SortDisplayedFields = ({
|
|
|
65
83
|
isDraggingSibling={isDraggingSibling}
|
|
66
84
|
onMoveField={onMoveField}
|
|
67
85
|
onClickEditField={onClickEditField}
|
|
68
|
-
onRemoveField={e =>
|
|
86
|
+
onRemoveField={e => handleRemoveField(e, index)}
|
|
69
87
|
name={field}
|
|
70
88
|
labelField={metadatas[field].list.label || field}
|
|
71
89
|
setIsDraggingSibling={setIsDraggingSibling}
|
|
@@ -85,7 +103,7 @@ const SortDisplayedFields = ({
|
|
|
85
103
|
data-testid="add-field"
|
|
86
104
|
>
|
|
87
105
|
{listRemainingFields.map(field => (
|
|
88
|
-
<MenuItem key={field} onClick={() =>
|
|
106
|
+
<MenuItem key={field} onClick={() => handleAddField(field)}>
|
|
89
107
|
{field}
|
|
90
108
|
</MenuItem>
|
|
91
109
|
))}
|
|
@@ -17,7 +17,7 @@ const reducer = (state = initialState, action) =>
|
|
|
17
17
|
switch (action.type) {
|
|
18
18
|
case 'ADD_FIELD': {
|
|
19
19
|
const layoutFieldList = get(state, layoutFieldListPath, []);
|
|
20
|
-
set(draftState, layoutFieldListPath, [action.item
|
|
20
|
+
set(draftState, layoutFieldListPath, [...layoutFieldList, action.item]);
|
|
21
21
|
break;
|
|
22
22
|
}
|
|
23
23
|
case 'MOVE_FIELD': {
|
|
@@ -19,6 +19,7 @@ import PrivateRoute from '../../components/PrivateRoute';
|
|
|
19
19
|
import { createRoute, makeUniqueRoutes } from '../../utils';
|
|
20
20
|
import AuthPage from '../AuthPage';
|
|
21
21
|
import NotFoundPage from '../NotFoundPage';
|
|
22
|
+
import UseCasePage from '../UseCasePage';
|
|
22
23
|
import { getUID } from './utils';
|
|
23
24
|
import routes from './utils/routes';
|
|
24
25
|
|
|
@@ -119,6 +120,7 @@ function App() {
|
|
|
119
120
|
)}
|
|
120
121
|
exact
|
|
121
122
|
/>
|
|
123
|
+
<PrivateRoute path="/usecase" component={UseCasePage} />
|
|
122
124
|
<PrivateRoute path="/" component={AuthenticatedApp} />
|
|
123
125
|
<Route path="" component={NotFoundPage} />
|
|
124
126
|
</Switch>
|
|
@@ -15,7 +15,7 @@ import UnauthenticatedLayout, {
|
|
|
15
15
|
Column,
|
|
16
16
|
LayoutContent,
|
|
17
17
|
} from '../../../../layouts/UnauthenticatedLayout';
|
|
18
|
-
import Logo from '
|
|
18
|
+
import Logo from '../../../../components/UnauthenticatedLogo';
|
|
19
19
|
|
|
20
20
|
const ForgotPassword = ({ onSubmit, schema }) => {
|
|
21
21
|
const { formatMessage } = useIntl();
|
|
@@ -9,7 +9,7 @@ import UnauthenticatedLayout, {
|
|
|
9
9
|
Column,
|
|
10
10
|
LayoutContent,
|
|
11
11
|
} from '../../../../layouts/UnauthenticatedLayout';
|
|
12
|
-
import Logo from '
|
|
12
|
+
import Logo from '../../../../components/UnauthenticatedLogo';
|
|
13
13
|
|
|
14
14
|
const ForgotPasswordSuccess = () => {
|
|
15
15
|
const { formatMessage } = useIntl();
|
|
@@ -16,7 +16,7 @@ import { useIntl } from 'react-intl';
|
|
|
16
16
|
import styled from 'styled-components';
|
|
17
17
|
import { Formik } from 'formik';
|
|
18
18
|
import { Column, LayoutContent } from '../../../../layouts/UnauthenticatedLayout';
|
|
19
|
-
import Logo from '
|
|
19
|
+
import Logo from '../../../../components/UnauthenticatedLogo';
|
|
20
20
|
import FieldActionWrapper from '../FieldActionWrapper';
|
|
21
21
|
|
|
22
22
|
const PasswordInput = styled(TextInput)`
|
|
@@ -10,7 +10,7 @@ import UnauthenticatedLayout, {
|
|
|
10
10
|
Column,
|
|
11
11
|
LayoutContent,
|
|
12
12
|
} from '../../../../layouts/UnauthenticatedLayout';
|
|
13
|
-
import Logo from '
|
|
13
|
+
import Logo from '../../../../components/UnauthenticatedLogo';
|
|
14
14
|
|
|
15
15
|
const Oops = () => {
|
|
16
16
|
const { formatMessage } = useIntl();
|
|
@@ -10,7 +10,7 @@ import { Flex } from '@strapi/design-system/Flex';
|
|
|
10
10
|
import { Link } from '@strapi/design-system/Link';
|
|
11
11
|
import { Button } from '@strapi/design-system/Button';
|
|
12
12
|
import { TextInput } from '@strapi/design-system/TextInput';
|
|
13
|
-
|
|
13
|
+
import { Checkbox } from '@strapi/design-system/Checkbox';
|
|
14
14
|
import { Grid, GridItem } from '@strapi/design-system/Grid';
|
|
15
15
|
import { Typography } from '@strapi/design-system/Typography';
|
|
16
16
|
import EyeStriked from '@strapi/icons/EyeStriked';
|
|
@@ -24,18 +24,16 @@ import UnauthenticatedLayout, {
|
|
|
24
24
|
Column,
|
|
25
25
|
LayoutContent,
|
|
26
26
|
} from '../../../../layouts/UnauthenticatedLayout';
|
|
27
|
-
import Logo from '
|
|
27
|
+
import Logo from '../../../../components/UnauthenticatedLogo';
|
|
28
28
|
import FieldActionWrapper from '../FieldActionWrapper';
|
|
29
29
|
|
|
30
30
|
const CenteredBox = styled(Box)`
|
|
31
31
|
text-align: center;
|
|
32
32
|
`;
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
// color: ${({ theme }) => theme.colors.primary600};
|
|
38
|
-
// `;
|
|
34
|
+
const A = styled.a`
|
|
35
|
+
color: ${({ theme }) => theme.colors.primary600};
|
|
36
|
+
`;
|
|
39
37
|
|
|
40
38
|
const PasswordInput = styled(TextInput)`
|
|
41
39
|
::-ms-reveal {
|
|
@@ -274,9 +272,7 @@ const Register = ({ fieldsToDisable, noSignin, onSubmit, schema }) => {
|
|
|
274
272
|
})}
|
|
275
273
|
type={confirmPasswordShown ? 'text' : 'password'}
|
|
276
274
|
/>
|
|
277
|
-
|
|
278
|
-
To uncomment then */}
|
|
279
|
-
{/* <Checkbox
|
|
275
|
+
<Checkbox
|
|
280
276
|
onValueChange={checked => {
|
|
281
277
|
handleChange({ target: { value: checked, name: 'news' } });
|
|
282
278
|
}}
|
|
@@ -309,7 +305,7 @@ const Register = ({ fieldsToDisable, noSignin, onSubmit, schema }) => {
|
|
|
309
305
|
),
|
|
310
306
|
}
|
|
311
307
|
)}
|
|
312
|
-
</Checkbox>
|
|
308
|
+
</Checkbox>
|
|
313
309
|
<Button fullWidth size="L" type="submit">
|
|
314
310
|
{formatMessage({
|
|
315
311
|
id: 'Auth.form.button.register',
|
|
@@ -18,7 +18,7 @@ import UnauthenticatedLayout, {
|
|
|
18
18
|
Column,
|
|
19
19
|
LayoutContent,
|
|
20
20
|
} from '../../../../layouts/UnauthenticatedLayout';
|
|
21
|
-
import Logo from '
|
|
21
|
+
import Logo from '../../../../components/UnauthenticatedLogo';
|
|
22
22
|
import FieldActionWrapper from '../FieldActionWrapper';
|
|
23
23
|
|
|
24
24
|
const PasswordInput = styled(TextInput)`
|
|
@@ -160,22 +160,6 @@ const AuthPage = ({ hasAdmin, setHasAdmin }) => {
|
|
|
160
160
|
auth.setToken(token, false);
|
|
161
161
|
auth.setUserInfo(user, false);
|
|
162
162
|
|
|
163
|
-
if (
|
|
164
|
-
(authType === 'register' && body.userInfo.news === true) ||
|
|
165
|
-
(authType === 'register-admin' && body.news === true)
|
|
166
|
-
) {
|
|
167
|
-
axios({
|
|
168
|
-
method: 'POST',
|
|
169
|
-
url: 'https://analytics.strapi.io/register',
|
|
170
|
-
data: {
|
|
171
|
-
email: user.email,
|
|
172
|
-
username: user.firstname,
|
|
173
|
-
firstAdmin: !hasAdmin,
|
|
174
|
-
},
|
|
175
|
-
cancelToken: source.token,
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
// Redirect to the homePage
|
|
179
163
|
setSubmitting(false);
|
|
180
164
|
setHasAdmin(true);
|
|
181
165
|
|
|
@@ -190,6 +174,19 @@ const AuthPage = ({ hasAdmin, setHasAdmin }) => {
|
|
|
190
174
|
}
|
|
191
175
|
}
|
|
192
176
|
|
|
177
|
+
if (
|
|
178
|
+
(authType === 'register' && body.userInfo.news === true) ||
|
|
179
|
+
(authType === 'register-admin' && body.news === true)
|
|
180
|
+
) {
|
|
181
|
+
push({
|
|
182
|
+
pathname: '/usecase',
|
|
183
|
+
search: `?hasAdmin=${hasAdmin}`,
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Redirect to the homePage
|
|
193
190
|
push('/');
|
|
194
191
|
} catch (err) {
|
|
195
192
|
if (err.response) {
|
|
@@ -94,13 +94,22 @@ const MarketPlacePage = () => {
|
|
|
94
94
|
</CenterTypography>
|
|
95
95
|
</Flex>
|
|
96
96
|
<Stack paddingTop={6} horizontal size={2}>
|
|
97
|
-
<LinkButton
|
|
97
|
+
<LinkButton
|
|
98
|
+
href="https://market.strapi.io"
|
|
99
|
+
size="L"
|
|
100
|
+
variant="primary"
|
|
101
|
+
endIcon={<ExternalLink />}
|
|
102
|
+
>
|
|
98
103
|
{formatMessage({
|
|
99
104
|
id: 'admin.pages.MarketPlacePage.submit.market.link',
|
|
100
105
|
defaultMessage: 'Visit the web marketplace',
|
|
101
106
|
})}
|
|
102
107
|
</LinkButton>
|
|
103
|
-
<LinkButton
|
|
108
|
+
<LinkButton
|
|
109
|
+
href="https://market.strapi.io/submit-plugin"
|
|
110
|
+
size="L"
|
|
111
|
+
variant="secondary"
|
|
112
|
+
>
|
|
104
113
|
{formatMessage({
|
|
105
114
|
id: 'admin.pages.MarketPlacePage.submit.plugin.link',
|
|
106
115
|
defaultMessage: 'Submit your plugin',
|
package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ContentBox/index.js
CHANGED
|
@@ -20,7 +20,7 @@ const HeaderContentBox = ({ apiToken }) => {
|
|
|
20
20
|
<span style={{ alignSelf: 'start' }}>
|
|
21
21
|
<CopyToClipboard
|
|
22
22
|
onCopy={() => {
|
|
23
|
-
trackUsageRef('didCopyTokenKey');
|
|
23
|
+
trackUsageRef.current('didCopyTokenKey');
|
|
24
24
|
toggleNotification({
|
|
25
25
|
type: 'success',
|
|
26
26
|
message: { id: 'Settings.apiTokens.notification.copied' },
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { useIntl } from 'react-intl';
|
|
4
|
+
import { useHistory } from 'react-router-dom';
|
|
5
|
+
import styled from 'styled-components';
|
|
6
|
+
import { parse } from 'qs';
|
|
7
|
+
import { pxToRem, useNotification, auth } from '@strapi/helper-plugin';
|
|
8
|
+
import { Main } from '@strapi/design-system/Main';
|
|
9
|
+
import { Flex } from '@strapi/design-system/Flex';
|
|
10
|
+
import { Box } from '@strapi/design-system/Box';
|
|
11
|
+
import { Stack } from '@strapi/design-system/Stack';
|
|
12
|
+
import { Typography } from '@strapi/design-system/Typography';
|
|
13
|
+
import { Select, Option } from '@strapi/design-system/Select';
|
|
14
|
+
import { TextInput } from '@strapi/design-system/TextInput';
|
|
15
|
+
import { TextButton } from '@strapi/design-system/TextButton';
|
|
16
|
+
import { Button } from '@strapi/design-system/Button';
|
|
17
|
+
import Logo from '../../components/UnauthenticatedLogo';
|
|
18
|
+
import UnauthenticatedLayout, { LayoutContent } from '../../layouts/UnauthenticatedLayout';
|
|
19
|
+
|
|
20
|
+
export const options = [
|
|
21
|
+
{
|
|
22
|
+
intlLabel: {
|
|
23
|
+
id: 'Usecase.front-end',
|
|
24
|
+
defaultMessage: 'Front-end developer',
|
|
25
|
+
},
|
|
26
|
+
value: 'front_end_developer',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
intlLabel: {
|
|
30
|
+
id: 'Usecase.back-end',
|
|
31
|
+
defaultMessage: 'Back-end developer',
|
|
32
|
+
},
|
|
33
|
+
value: 'back_end_developer',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
intlLabel: {
|
|
37
|
+
id: 'Usecase.full-stack',
|
|
38
|
+
defaultMessage: 'Full-stack developer',
|
|
39
|
+
},
|
|
40
|
+
value: 'full_stack_developer',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
intlLabel: {
|
|
44
|
+
id: 'Usecase.content-manager',
|
|
45
|
+
defaultMessage: 'Content Manager',
|
|
46
|
+
},
|
|
47
|
+
value: 'content_manager',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
intlLabel: {
|
|
51
|
+
id: 'Usecase.content-creator',
|
|
52
|
+
defaultMessage: 'Content Creator',
|
|
53
|
+
},
|
|
54
|
+
value: 'content_creator',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
intlLabel: {
|
|
58
|
+
id: 'Usecase.other',
|
|
59
|
+
defaultMessage: 'Other',
|
|
60
|
+
},
|
|
61
|
+
value: 'other',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const TypographyCenter = styled(Typography)`
|
|
66
|
+
text-align: center;
|
|
67
|
+
`;
|
|
68
|
+
|
|
69
|
+
const UseCasePage = () => {
|
|
70
|
+
const toggleNotification = useNotification();
|
|
71
|
+
const { push, location } = useHistory();
|
|
72
|
+
const { formatMessage } = useIntl();
|
|
73
|
+
const [role, setRole] = useState();
|
|
74
|
+
const [otherRole, setOtherRole] = useState('');
|
|
75
|
+
const { firstname, email } = auth.getUserInfo();
|
|
76
|
+
const { hasAdmin } = parse(location?.search, { ignoreQueryPrefix: true });
|
|
77
|
+
const isOther = role === 'other';
|
|
78
|
+
|
|
79
|
+
const handleSubmit = skipPersona => {
|
|
80
|
+
try {
|
|
81
|
+
axios({
|
|
82
|
+
method: 'POST',
|
|
83
|
+
url: 'https://analytics.strapi.io/register',
|
|
84
|
+
data: {
|
|
85
|
+
email,
|
|
86
|
+
username: firstname,
|
|
87
|
+
firstAdmin: Boolean(!hasAdmin),
|
|
88
|
+
persona: {
|
|
89
|
+
role: skipPersona ? undefined : role,
|
|
90
|
+
otherRole: skipPersona ? undefined : otherRole,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
toggleNotification({
|
|
96
|
+
type: 'success',
|
|
97
|
+
message: {
|
|
98
|
+
id: 'Usecase.notification.success.project-created',
|
|
99
|
+
defaultMessage: 'Project has been successfully created',
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
push('/');
|
|
103
|
+
} catch (err) {
|
|
104
|
+
// Silent
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
return (
|
|
109
|
+
<UnauthenticatedLayout>
|
|
110
|
+
<Main labelledBy="usecase-title">
|
|
111
|
+
<LayoutContent>
|
|
112
|
+
<form onSubmit={() => handleSubmit(false)}>
|
|
113
|
+
<Flex direction="column" paddingBottom={7}>
|
|
114
|
+
<Logo />
|
|
115
|
+
<Box paddingTop={6} paddingBottom={1} width={pxToRem(250)}>
|
|
116
|
+
<TypographyCenter variant="alpha" as="h1" id="usecase-title">
|
|
117
|
+
{formatMessage({
|
|
118
|
+
id: 'Usecase.title',
|
|
119
|
+
defaultMessage: 'Tell us a bit more about yourself',
|
|
120
|
+
})}
|
|
121
|
+
</TypographyCenter>
|
|
122
|
+
</Box>
|
|
123
|
+
</Flex>
|
|
124
|
+
<Stack size={6}>
|
|
125
|
+
<Select
|
|
126
|
+
id="usecase"
|
|
127
|
+
data-testid="usecase"
|
|
128
|
+
label={formatMessage({
|
|
129
|
+
id: 'Usecase.input.work-type',
|
|
130
|
+
defaultMessage: 'What type of work do you do?',
|
|
131
|
+
})}
|
|
132
|
+
// onClear={() => setRole(null)}
|
|
133
|
+
// clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}
|
|
134
|
+
onChange={setRole}
|
|
135
|
+
value={role}
|
|
136
|
+
>
|
|
137
|
+
{options.map(({ intlLabel, value }) => (
|
|
138
|
+
<Option key={value} value={value}>
|
|
139
|
+
{formatMessage(intlLabel)}
|
|
140
|
+
</Option>
|
|
141
|
+
))}
|
|
142
|
+
</Select>
|
|
143
|
+
{isOther && (
|
|
144
|
+
<TextInput
|
|
145
|
+
name="other"
|
|
146
|
+
label={formatMessage({ id: 'Usecase.other', defaultMessage: 'Other' })}
|
|
147
|
+
value={otherRole}
|
|
148
|
+
onChange={e => setOtherRole(e.target.value)}
|
|
149
|
+
data-testid="other"
|
|
150
|
+
/>
|
|
151
|
+
)}
|
|
152
|
+
<Button type="submit" size="L" fullWidth disabled={!role}>
|
|
153
|
+
{formatMessage({ id: 'form.button.finish', defaultMessage: 'Finish' })}
|
|
154
|
+
</Button>
|
|
155
|
+
</Stack>
|
|
156
|
+
</form>
|
|
157
|
+
</LayoutContent>
|
|
158
|
+
<Flex justifyContent="center">
|
|
159
|
+
<Box paddingTop={4}>
|
|
160
|
+
<TextButton onClick={() => handleSubmit(true)}>
|
|
161
|
+
{formatMessage({
|
|
162
|
+
id: 'Usecase.button.skip',
|
|
163
|
+
defaultMessage: 'Skip this question',
|
|
164
|
+
})}
|
|
165
|
+
</TextButton>
|
|
166
|
+
</Box>
|
|
167
|
+
</Flex>
|
|
168
|
+
</Main>
|
|
169
|
+
</UnauthenticatedLayout>
|
|
170
|
+
);
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
export default UseCasePage;
|
|
@@ -214,6 +214,16 @@
|
|
|
214
214
|
"Username": "Username",
|
|
215
215
|
"Users": "Users",
|
|
216
216
|
"Users & Permissions": "Users & Permissions",
|
|
217
|
+
"Usecase.front-end": "Front-end developer",
|
|
218
|
+
"Usecase.back-end": "Back-end developer",
|
|
219
|
+
"Usecase.full-stack": "Full-stack developer",
|
|
220
|
+
"Usecase.content-manager": "Content Manager",
|
|
221
|
+
"Usecase.content-creator": "Content Creator",
|
|
222
|
+
"Usecase.other": "Other",
|
|
223
|
+
"Usecase.title": "Tell us a bit more about yourself",
|
|
224
|
+
"Usecase.input.work-type": "What type of work do you do?",
|
|
225
|
+
"Usecase.button.skip": "Skip this question",
|
|
226
|
+
"Usecase.notification.success.project-created": "Project has been successfully created",
|
|
217
227
|
"Users.components.List.empty": "There is no users...",
|
|
218
228
|
"Users.components.List.empty.withFilters": "There is no users with the applied filters...",
|
|
219
229
|
"Users.components.List.empty.withSearch": "There is no users corresponding to the search ({search})...",
|
|
@@ -240,7 +240,7 @@
|
|
|
240
240
|
"app.components.BlockLink.blog.content": "Lire les dernières actualités à propos de Strapi et de son écosystème",
|
|
241
241
|
"app.components.BlockLink.code": "Apps d'exemple",
|
|
242
242
|
"app.components.BlockLink.code.content": "Apprenez en testant des projets réels développés par la communauté.",
|
|
243
|
-
"app.components.BlockLink.
|
|
243
|
+
"app.components.BlockLink.documentation": "Documentation",
|
|
244
244
|
"app.components.BlockLink.documentation.content": "Découvrir les concepts essentials, guides et instructions.",
|
|
245
245
|
"app.components.BlockLink.tutorial": "Tutoriels",
|
|
246
246
|
"app.components.BlockLink.tutorial.content": "Suivre les instructions étapes par étapes pour utiliser et personnaliser Strapi.",
|
|
@@ -87,9 +87,10 @@
|
|
|
87
87
|
"Settings.apiTokens.copy.lastWarning": "이 토큰을 복사해두세요. 다시 볼 수 없습니다!",
|
|
88
88
|
"Settings.apiTokens.create": "항목 추가",
|
|
89
89
|
"Settings.apiTokens.description": "API 사용을 위해 생성된 토큰 목록입니다.",
|
|
90
|
+
"Settings.apiTokens.details": "세부 사항",
|
|
90
91
|
"Settings.apiTokens.emptyStateLayout": "아직 콘텐츠가 없습니다.",
|
|
91
92
|
"Settings.apiTokens.notification.copied": "토큰이 클립보드에 복사되었습니다.",
|
|
92
|
-
"Settings.apiTokens.title": "API
|
|
93
|
+
"Settings.apiTokens.title": "API 토큰",
|
|
93
94
|
"Settings.apiTokens.types.full-access": "전체 액세스",
|
|
94
95
|
"Settings.apiTokens.types.read-only": "읽기 전용",
|
|
95
96
|
"Settings.application.description": "프로젝트 세부 정보",
|
|
@@ -127,22 +128,23 @@
|
|
|
127
128
|
"Settings.permissions.users.listview.header.subtitle": "{number, plural, =0 {# 명} one {# 명} other {# 명}}의 사용자를 찾았습니다.",
|
|
128
129
|
"Settings.permissions.users.listview.header.title": "사용자",
|
|
129
130
|
"Settings.permissions.users.tabs.label": "Tabs Permissions",
|
|
130
|
-
"Settings.profile.form.notify.data.loaded": "
|
|
131
|
+
"Settings.profile.form.notify.data.loaded": "사용자 프로필 정보를 불러왔습니다.",
|
|
131
132
|
"Settings.profile.form.section.experience.clear.select": "Clear the interface language selected",
|
|
132
133
|
"Settings.profile.form.section.experience.interfaceLanguage": "인터페이스 언어",
|
|
133
134
|
"Settings.profile.form.section.experience.interfaceLanguage.hint": "선택한 언어로 인터페이스의 언어가 변경됩니다.",
|
|
134
|
-
"Settings.profile.form.section.experience.
|
|
135
|
+
"Settings.profile.form.section.experience.interfaceLanguageHelp": "선택하면 이 계정에서만 인터페이스 언어가 변경됩니다. 팀에서 다른 언어를 사용할 수 있도록 하려면 이 {documentation}를 참조해주세요.",
|
|
136
|
+
"Settings.profile.form.section.experience.title": "사용자 경험",
|
|
135
137
|
"Settings.profile.form.section.helmet.title": "사용자 프로필",
|
|
136
138
|
"Settings.profile.form.section.password.title": "비밀번호 변경",
|
|
137
139
|
"Settings.profile.form.section.profile.page.title": "Profile page",
|
|
138
|
-
"Settings.profile.form.section.profile.title": "
|
|
140
|
+
"Settings.profile.form.section.profile.title": "프로필",
|
|
139
141
|
"Settings.roles.create.description": "역할에 부여된 권한을 정의합니다.",
|
|
140
142
|
"Settings.roles.create.title": "Create a role",
|
|
141
143
|
"Settings.roles.created": "Role created",
|
|
142
144
|
"Settings.roles.edit.title": "역할 수정",
|
|
143
145
|
"Settings.roles.form.button.users-with-role": "{number, plural, =0 {# 명} one {# 명} other {# 명}}의 사용자가 이 역할을 가지고 있습니다.",
|
|
144
146
|
"Settings.roles.form.created": "Created",
|
|
145
|
-
"Settings.roles.form.description": "
|
|
147
|
+
"Settings.roles.form.description": "역할에 대한 이름과 설명",
|
|
146
148
|
"Settings.roles.form.input.description": "설명",
|
|
147
149
|
"Settings.roles.form.input.name": "이름",
|
|
148
150
|
"Settings.roles.form.permission.property-label": "{label} permissions",
|
|
@@ -215,8 +217,11 @@
|
|
|
215
217
|
"admin.pages.MarketPlacePage.coming-soon.1": "Strapi를 멋지게 만들어줄 새로운 방법.",
|
|
216
218
|
"admin.pages.MarketPlacePage.coming-soon.2": "곧 찾아옵니다.",
|
|
217
219
|
"admin.pages.MarketPlacePage.content.subtitle": "새로운 마켓플레이스는 Strapi에서 더 많은 것을 할 수 있도록 도와줄겁니다. 새 플러그인을 발견하고 설치하기 위한 최고의 경험이 다가옵니다.",
|
|
220
|
+
"admin.pages.MarketPlacePage.content.subtitle.published": "웹 마켓플레이스를 통해 Strapi를 최대한 활용할 수 있습니다. 또한 앱에서 직접 플러그인을 검색하고 설치할 수 있는 최상의 환경을 제공하기 위해 노력하고 있습니다.",
|
|
218
221
|
"admin.pages.MarketPlacePage.helmet": "마켓플레이스 - 플러그인",
|
|
219
222
|
"admin.pages.MarketPlacePage.illustration": "marketplace illustration",
|
|
223
|
+
"admin.pages.MarketPlacePage.market.link": "웹 마켓플레이스 방문하기",
|
|
224
|
+
"admin.pages.MarketPlacePage.published": "드디어 도착했어요.",
|
|
220
225
|
"admin.pages.MarketPlacePage.submit.plugin.link": "플러그인 제출",
|
|
221
226
|
"admin.pages.MarketPlacePage.subtitle": "Strapi에서 더 많은 것을 해보세요.",
|
|
222
227
|
"admin.pages.MarketPlacePage.title": "마켓플레이스",
|
|
@@ -272,6 +277,8 @@
|
|
|
272
277
|
"app.components.LeftMenu.collapse": "Collapse the navbar",
|
|
273
278
|
"app.components.LeftMenu.expand": "Expand the navbar",
|
|
274
279
|
"app.components.LeftMenu.logout": "로그아웃",
|
|
280
|
+
"app.components.LeftMenu.navbrand.title": "Strapi 대시보드",
|
|
281
|
+
"app.components.LeftMenu.navbrand.workplace": "작업 공간",
|
|
275
282
|
"app.components.LeftMenu.profile": "프로필",
|
|
276
283
|
"app.components.LeftMenuFooter.documentation": "도큐멘테이션",
|
|
277
284
|
"app.components.LeftMenuFooter.help": "도움말",
|
|
@@ -470,9 +477,9 @@
|
|
|
470
477
|
"content-manager.components.FiltersPickWrapper.PluginHeader.description": "필터링 조건을 설정하세요.",
|
|
471
478
|
"content-manager.components.FiltersPickWrapper.PluginHeader.title.filter": "필터",
|
|
472
479
|
"content-manager.components.FiltersPickWrapper.hide": "숨김",
|
|
473
|
-
"content-manager.components.LeftMenu.Search.label": "
|
|
474
|
-
"content-manager.components.LeftMenu.collection-types": "
|
|
475
|
-
"content-manager.components.LeftMenu.single-types": "
|
|
480
|
+
"content-manager.components.LeftMenu.Search.label": "콘텐츠 타입 검색",
|
|
481
|
+
"content-manager.components.LeftMenu.collection-types": "콜렉션 타입",
|
|
482
|
+
"content-manager.components.LeftMenu.single-types": "싱글 타입",
|
|
476
483
|
"content-manager.components.LimitSelect.itemsPerPage": "항목 수 / 페이지",
|
|
477
484
|
"content-manager.components.NotAllowedInput.text": "이 필드를 볼 수 있는 권한이 없습니다.",
|
|
478
485
|
"content-manager.components.RepeatableComponent.error-message": "The component(s) contain error(s)",
|